package org.batatasframework.rawdata;

import java.util.Arrays;
import java.util.List;

import javax.persistence.EntityManager;

import org.batatasframework.support.AbstractSupportDefinition;

import cn.bonoon.core.RawdataItem;
import cn.bonoon.entities.AbstractRawdataImportItem;
import cn.bonoon.kernel.support.IOperator;

/**
 * 
 * @author jackson
 *
 */
public class RawdataDefinition extends AbstractSupportDefinition{
	public static final String DEFAULT_FILE_CATALOG = "rawdata";
	
	/** 用于存储数据的位置！ */
	String fileCatalog = DEFAULT_FILE_CATALOG;
	List<String> options;
//	/** 是否需要保存被解析的源文件 */
	private String vmpath;
	AbstractRawdataParser<? extends AbstractRawdataImportItem> parser;
	RawdataFilter filter;
	/** 指定需要解析多少个sheet，默认只处理一个，即第一个sheet，其它的将会被忽略 */
	int sheetCount = 1;
	/** 默认情况下是空一行，认为第一行是列表的台头 */
	int startRow = 1;
	
	RawdataDefinition(String key, String name){
		super(key, name);
	}
	
	public RawdataDefinition options(String... options){
		check();
		if(null != options){
			this.options = Arrays.asList(options);
		}
		return this;
	}
	
	public RawdataItem toItem(){
		RawdataItem item = new RawdataItem();
		item.setKey(key);
		item.setValue(name);
		item.setOptions(options);
		return item;
	}
	
	public RawdataParser getParser() {
		return parser;
	}
	
	public void setParser(AbstractRawdataParser<? extends AbstractRawdataImportItem> parser) {
		check();
		this.parser = parser.init(this);
	}
	
	@Override
	public String toString() {
		return name + "[" + key + "]";
	}

	/** 判断这个定义这个用户是否可能操作 */
	public boolean visitable(EntityManager entityManager, IOperator user) {
		if(null != filter) return filter.filte(entityManager, user);
		return true;
	}

	public String getVmpath() {
		return vmpath;
	}

	public RawdataDefinition vm(String vmpath) {
		check();
		this.vmpath = vmpath;
		return this;
	}

//	public String getTemplatePath() {
//		return null;
//	}
}
